using System;
using System.IO;
using System.Text;

namespace SistemaLib.sipe.util.io
{
	
	public class LeedorDeArchivos
	{
		string _camino;
		char[] _separador; // separador por defecto
        FileStream stream;
		StreamReader _archivo;
		string[] _campos;
		int _linea_actual = 0;

		public LeedorDeArchivos()
		{
			_separador = new char[1];
			_separador[0] = Convert.ToChar(9);
		}

		public LeedorDeArchivos( string camino) : this()
		{
			_camino = camino;
		}

		public void SaltearCabecera()
		{
			LeerLinea();
		}

		public string[] ObtenerCabecera()
		{
			LeerLinea();
			return _campos;
		}

		public void Abrir()
		{
            stream = new FileStream(_camino, FileMode.Open);
            _archivo = new StreamReader(stream, Encoding.GetEncoding("iso-8859-15"));
		}

		public void Cerrar()
		{
            _archivo.Close();
            stream.Close();
		}

		public bool TieneLineaSiguiente()
		{
			return ( _archivo.Peek() > -1 );
		}

		public void LeerLinea()
		{
			string linea = _archivo.ReadLine();
			_linea_actual++;
			_campos = linea.Split(_separador);
		}
		
		public string[] ObtieneCampos()
		{
			return _campos;
		}

		public string ObtieneString( int index)
		{
			if ( index < _campos.Length )
			{
				return _campos[index];
			}
			else
			{
				return "";
			}
		}

		public int ObtieneInt( int index)
		{
			string campo = ObtieneString( index);
			try
			{
				return int.Parse( campo);
			}
			catch( Exception)
			{
				return 0;
			}
		}

		public decimal ObtieneMoney( int index)
		{
			string campo = ObtieneString( index);
			try
			{
				return util.Func.CadenaToDecimal( campo);
			}
			catch( Exception)
			{
				return 0;
			}
		}

		public DateTime ObtieneFecha( int index)
		{
			string campo = ObtieneString( index);
			try
			{
				return util.Func.CadenaToDateTime( campo);
			}
			catch( Exception)
			{
				return consts.generales.FECHA_NULL;
			}
		}

		public int NumeroLinea
		{
			get
			{ return _linea_actual;}
		}

		public int CantidadColumnas
		{
			get
			{ return _campos.Length;}
		}


	}
}
